1. 题目

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题思路

遍历可以解决。

可以用递归写法。

3. 代码

递归:

3.1. 创建新结点

这种一开始容易想到

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        ListNode* res = new ListNode();
        if(l1==NULL) res=l2;
        else if(l2==NULL) res=l1;
        else{
            if(l1->val>l2->val) {
                res=l2;
                res->next=mergeTwoLists(l1,l2->next);
            }
            else {
                res=l1;
                res->next=mergeTwoLists(l1->next,l2);
            }
        }    
        return res;
    }
};

3.2. 不创建新结点

这种比起创建新结点省时间省空间

class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if(l1==NULL) return l2;
        else if(l2==NULL) return l1;
        else{
            if(l1->val>l2->val) {
                l2->next=mergeTwoLists(l1,l2->next);
                return l2;
            }
            else {
                l1->next=mergeTwoLists(l1->next,l2);
                return l1;
            }
        }    
    }
};

results matching ""

    No results matching ""